package com.manner.groupon.utils;

import org.springframework.stereotype.Component;

import java.math.BigInteger;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;

/**
 * @Author: Manner
 * @Description: 团购券订单编号生成
 * @DateTime: 2024/10/12 22:31
 */
@Component
public class GrouponOrderIdGenerate {

    public static String generateCurrentDateTime() {
        Date now = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        String formattedDate = dateFormat.format(now);
        return formattedDate;
    }

    /**
     * 年月日时分秒+随机七位整数生成团购券订单编号
     *
     * @return long
     * @author Manner
     * @date 2024/10/12 22:33
     */
    public static BigInteger generateOrderNumber() {
        // 获取当前时间
        String formattedDate = generateCurrentDateTime();
        // 生成随机七位整数
        Random random = new Random();
        int randomSevenDigits = 1000000 + random.nextInt(9000000); // 保证七位
        // 组合成最终的订单编号
        // 注意：这里使用字符串拼接后转换为Long类型，需要确保结果不会超过Long的最大值
        String orderNumberStr = formattedDate + randomSevenDigits;
        // 转换为Long类型
        return new BigInteger(orderNumberStr);
    }

    /**
     * 生成 HB + 年月日时分秒 + 随机六位数的订单流水编号
     *
     * @return String
     * @author Manner
     * @date 2024/10/13 1:24
     */
    public static String generateOrderFlowNumber() {
        // 获取当前时间
        String formattedDate = generateCurrentDateTime();
        // 生成随机七位整数
        Random random = new Random();
        int randomSevenDigits = 100000 + random.nextInt(900000); // 保证七位
        // 组合成最终的订单编号
        // 注意：这里使用字符串拼接后转换为Long类型，需要确保结果不会超过Long的最大值
        String orderFlowNumberStr = "HB" + formattedDate + randomSevenDigits;
        // 转换为Long类型
        return orderFlowNumberStr;
    }
}
